<?
/**
 * 쿠폰 (Coupon for Gnuboard4)
 *
 * Copyright (c) 2010 Choi Jae-Young <www.miwit.com>
 *
 * 저작권 안내
 * - 저작권자는 이 프로그램을 사용하므로서 발생하는 모든 문제에 대하여 책임을 지지 않습니다. 
 * - 이 프로그램을 어떠한 형태로든 재배포 및 공개하는 것을 허락하지 않습니다.
 * - 이 저작권 표시사항을 저작권자를 제외한 그 누구도 수정할 수 없습니다.
 */

if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가 

function mw_make_coupon($cp_id, $count=100, $etc='', $mb_ids='')
{
    global $g4, $config, $mw_coupon;
    global $cp_rel_table, $cp_rel_id;

    if (is_array($mb_ids) && !empty($mb_ids) && $count != count($mb_ids)) {
        return false;
    }

    $row = sql_fetch("select mb_email from $g4[member_table] where mb_id = '$config[cf_admin]'");
    $admin_email = $row[mb_email];
    $admin_datetime = $row[mb_datetime];

    for ($i=1; $i<=$count; $i++) {
        $coupon = md5($admin_email.$admin_datetime.$cp_id.$count.$i.$g4[time_ymdhis].$etc);
        $coupon = substr($coupon, 4, 4).'-'.substr($coupon, 8, 4).'-'.substr($coupon, 12, 4).'-'.substr($coupon, 16, 4);
        $coupon = strtoupper($coupon);

        $mb_id = '';
        if ($count == 1 && !empty($mb_ids)) {
            $mb_id = $mb_ids[0];
        }
        else if ($count > 1 && !empty($mb_ids)) {
            $mb_id = $mb_ids[$i-1];
        }

        $row = sql_fetch(" select cp_coupon from $mw_coupon[list_table] where cp_coupon = '$coupon' ");
        if ($row)
            mw_make_coupon("$cp_id", 1, rand(0,99999999), $mb_id);
        else
            sql_query("insert into $mw_coupon[list_table] set cp_id = '$cp_id', cp_coupon = '$coupon', mb_id_only = '$mb_id', cp_rel_table = '$cp_rel_table', cp_rel_id = '$cp_rel_id' ");
    }
}

function mw_check_coupon($coupon, $is_save=false)
{
    global $g4, $is_member, $mw_coupon, $config, $member;

    if (!$is_member) return("login");
    if (!trim($coupon)) return("null");

    $coupon_num = strtoupper(trim($coupon));

    $coupon = sql_fetch("select * from $mw_coupon[list_table] where cp_coupon = '$coupon_num'");
    if (!$coupon) return("false");
    if ($coupon[cp_use]) return("used");
    if ($coupon[mb_id_only] && strtolower($coupon[mb_id_only]) != strtolower($member[mb_id])) return("permission");

    $info = sql_fetch("select * from $mw_coupon[info_table] where cp_id = '$coupon[cp_id]'");
    if (!$info) return("false");
    if (!($info[cp_sdate] <= $g4[time_ymd] && $g4[time_ymd] <= $info[cp_edate])) return("nodate");
    if (!$info[cp_flag]) return ("nouse");

    if (!$info[cp_multi]) {
        $tmp = sql_fetch("select * from $mw_coupon[list_table] where cp_id = '$info[cp_id]' and mb_id = '$member[mb_id]'");
        if ($tmp) return("onlyone");
    }

    if ($info[cp_regday]) {
        if ($info[cp_regday_type]) {
            if ((($g4[server_time]-strtotime($member[mb_datetime]))/86400) <= $info[cp_regday]) {
                return("regday|1|".$info[cp_regday]);
            }
        }
        else {
            if ((($g4[server_time]-strtotime($member[mb_datetime]))/86400) > $info[cp_regday]) {
                return("regday|0|".$info[cp_regday]);
            }
        }
    }

    if ($is_save) {
        if ($info[cp_type] == 'p') {
            insert_point($member[mb_id], $info[cp_price], '쿠폰 적립', 'mw_coupon', $coupon_num, '쿠폰');
        }

        if ($info[cp_type] == 'c') {
            mw_cash_charge($member[mb_id], $info[cp_price], '쿠폰 적립', 0, '서비스', $coupon_num, '', 1, 0);
        }

        sql_query("update $mw_coupon[list_table] set cp_use = '1', cp_ip = '$_SERVER[REMOTE_ADDR]', mb_id = '$member[mb_id]', cp_use_datetime = '$g4[time_ymdhis]' where cp_coupon = '$coupon_num' ");
    }

    return $info;

}

function mw_check_coupon_message($code)
{
    $tmp = explode("|", $code);

    if ($code == 'true') {
        return true;
    } else if ($code == 'login') {
        return("로그인 후 이용해주세요.");
    } else if ($code == 'null') {
        return("쿠폰 번호를 입력해주세요.");
    } else if ($code == 'nodate') {
        return("쿠폰 사용기간이 아닙니다.");
    } else if ($code == 'used') {
        return("이미 사용된 쿠폰입니다.");
    } else if ($code == 'permission') {
        return("이 쿠폰을 사용할 권한이 없습니다.");
    } else if ($code == 'false') {
        return("쿠폰 번호가 잘못되었습니다.");
    } else if ($code == 'nouse') {
        return("사용이 중지된 쿠폰입니다.");
    } else if ($code == 'onlyone') {
        return("이 쿠폰은 아이디당 한번만 적립 가능합니다.");
    } else if ($tmp[0] == 'regday') {
        if ($tmp[1])
            return("이 쿠폰은 가입 후 {$tmp[2]}일 지나야 사용할 수 있습니다.");
        else
            return("이 쿠폰은 가입 후 {$tmp[2]}일 이내에만 사용할 수 있습니다.");
    }
}

function mw_get_coupon_unit($t)
{
    global $mw_cash;

    $ret = array('name' => '', 'unit' => '');
    if ($t == 'c') {
        $ret[name] = $mw_cash[cf_cash_name];
        $ret[unit] = $mw_cash[cf_cash_unit];
    } else {
        $ret[name] = "포인트";
        $ret[unit] = '점';
    }
    return $ret;
}

// euckr -> utf8 
if (!function_exists("set_utf8")) {
function set_utf8($str)
{
    if (!is_utf8($str))
        $str = convert_charset('cp949', 'utf-8', $str);

    $str = trim($str);

    return $str;
}}

// utf8 -> euckr 
if (!function_exists("set_euckr")) {
function set_euckr($str)
{
    if (is_utf8($str))
        $str = convert_charset('utf-8', 'cp949', $str);

    $str = trim($str);

    return $str;
}}


// Charset 을 변환하는 함수 
if (!function_exists("convert_charset")) {
function convert_charset($from_charset, $to_charset, $str) {
    if( function_exists('iconv') )
        return iconv($from_charset, $to_charset, $str);
    elseif( function_exists('mb_convert_encoding') )
        return mb_convert_encoding($str, $to_charset, $from_charset);
    else
        die("Not found 'iconv' or 'mbstring' library in server.");
}}

// 텍스트가 utf-8 인지 검사하는 함수 
if (!function_exists("is_utf8")) {
function is_utf8($string) {

  // From http://w3.org/International/questions/qa-forms-utf-8.html
  return preg_match('%^(?:
        [\x09\x0A\x0D\x20-\x7E]            # ASCII
      | [\xC2-\xDF][\x80-\xBF]            # non-overlong 2-byte
      |  \xE0[\xA0-\xBF][\x80-\xBF]        # excluding overlongs
      | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}  # straight 3-byte
      |  \xED[\x80-\x9F][\x80-\xBF]        # excluding surrogates
      |  \xF0[\x90-\xBF][\x80-\xBF]{2}    # planes 1-3
      | [\xF1-\xF3][\x80-\xBF]{3}          # planes 4-15
      |  \xF4[\x80-\x8F][\x80-\xBF]{2}    # plane 16
 )*$%xs', $string);
}}

